/**
 *
 * @author Kenneth
 * Bean que implementa las interfaces Remote y Local para el modulo de autenticacion
 */

package solicitud.capalogica;

import capadatos.ModuloSolicitudCapaDatos;
import sistemaamd.ServiceResult;
import sistemaamd.Pais;
import sistemaamd.SolicitudFinanciamiento;

import java.util.ArrayList;
import java.util.Date;
import javax.ejb.Stateless;

@Stateless
public class ModuloSolicitudBean implements ModuloSolicitudRemote, ModuloSolicitudLocal {
    //Instancia del modulo de clientes de capa 3
    ModuloSolicitudCapaDatos moduloSolicitudCapaDatos;

    //Consulta para autenticar usuario de la BD
    @Override
    public ServiceResult obtenerPaises() {
        ServiceResult resultado;
        //se crea una instancia de la clase de capa 3
        this.moduloSolicitudCapaDatos = new ModuloSolicitudCapaDatos();

        //si hubo error en la creación de la instancia de capa 3
        if(this.moduloSolicitudCapaDatos.getExisteError())
            //retorna con el mensaje de error
            return new ServiceResult(this.moduloSolicitudCapaDatos.getMensajeError());

        //se consultan los clientes en capa 3
        resultado = this.moduloSolicitudCapaDatos.obtenerPaises();
        
        //si no hubo errores
        if(!resultado.getExisteError().booleanValue()) {
            //se crea una lista de objetos Cliente
            ArrayList<Pais> lista = new ArrayList<Pais>();
            //se obtiene el valor del resultado de capa 3
            ArrayList valorResultado = resultado.getValorResultado();

            for(int i = 0; i < valorResultado.size(); i++) {
                Pais pais = (Pais)valorResultado.get(i);
                lista.add(pais);
            }
            //se crea una nueva variable de resultado
            resultado = new ServiceResult();
            //y se establece el valor como la lista de Clientes
            resultado.setValorResultado(lista);
        }

        return resultado;
    }


    //Consulta para obtener todas las solicitudes presentadas
    @Override
    public ServiceResult obtenerSolicitudes() {
        ServiceResult resultado=null;

        //se crea una instancia de la clase de capa 3
        this.moduloSolicitudCapaDatos = new ModuloSolicitudCapaDatos();

        //si hubo error en la creación de la instancia de capa 3
        if(this.moduloSolicitudCapaDatos.getExisteError())
            //retorna con el mensaje de error
            return new ServiceResult(this.moduloSolicitudCapaDatos.getMensajeError());

        //se consultan los clientes en capa 3
        resultado = this.moduloSolicitudCapaDatos.obtenerSolicitudesPresentadas();

        //si no hubo errores
        if(!resultado.getExisteError().booleanValue()) {
            //se crea una lista de objetos Cliente
            ArrayList<SolicitudFinanciamiento> lista = new ArrayList<SolicitudFinanciamiento>();
            //se obtiene el valor del resultado de capa 3
            ArrayList valorResultado = resultado.getValorResultado();

            for(int i = 0; i < valorResultado.size(); i++) {
                SolicitudFinanciamiento solicitud = (SolicitudFinanciamiento)valorResultado.get(i);
                lista.add(solicitud);
            }
            //se crea una nueva variable de resultado
            resultado = new ServiceResult();
            //y se establece el valor como la lista de Clientes
            resultado.setValorResultado(lista);
        }

        return resultado;
    }

    //Consulta para obtener los proyectos asignados a un RProy
    @Override
    public ServiceResult ObtenerSolicitudesRProy(int idUsuario)
    {
        ServiceResult resultado=null;

        //se crea una instancia de la clase de capa 3
        this.moduloSolicitudCapaDatos = new ModuloSolicitudCapaDatos();

        //si hubo error en la creación de la instancia de capa 3
        if(this.moduloSolicitudCapaDatos.getExisteError())
            //retorna con el mensaje de error
            return new ServiceResult(this.moduloSolicitudCapaDatos.getMensajeError());

        //se consultan los clientes en capa 3
        resultado = this.moduloSolicitudCapaDatos.obtenerSolicitudesRProy(idUsuario);

        //si no hubo errores
        if(!resultado.getExisteError().booleanValue()) {
            //se crea una lista de objetos Cliente
            ArrayList<SolicitudFinanciamiento> lista = new ArrayList<SolicitudFinanciamiento>();
            //se obtiene el valor del resultado de capa 3
            ArrayList valorResultado = resultado.getValorResultado();

            for(int i = 0; i < valorResultado.size(); i++) {
                SolicitudFinanciamiento solicitud = (SolicitudFinanciamiento)valorResultado.get(i);
                lista.add(solicitud);
            }
            //se crea una nueva variable de resultado
            resultado = new ServiceResult();
            //y se establece el valor como la lista de Clientes
            resultado.setValorResultado(lista);
        }

        return resultado;
    }

    //Consulta para insertar una parte de las solicitudes
    @Override
    public ServiceResult InsertarSolicitudParcial(int idSolicitud,String codigo,int idProyecto,Date fechaInicio,Date fechaFinal,int idUsuario,int idPais,String objetivos)
    {
        ServiceResult resultado=null;

        //se crea una instancia de la clase de capa 3
        this.moduloSolicitudCapaDatos = new ModuloSolicitudCapaDatos();

        //si hubo error en la creación de la instancia de capa 3
        if(this.moduloSolicitudCapaDatos.getExisteError())
            //retorna con el mensaje de error
            return new ServiceResult(this.moduloSolicitudCapaDatos.getMensajeError());

        //se consultan los clientes en capa 3
        resultado = this.moduloSolicitudCapaDatos.insertarSolicitudParcial( idSolicitud, codigo, idProyecto, fechaInicio, fechaFinal, idUsuario, idPais, objetivos);

        return resultado;
    }
}
